<?php

class Application_Model_User extends Zend_Db_Table_Abstract
{
    protected $_name = "kp_users"; //Ten bang
    protected $_primary = "user_id"; //Khoa chinh
    protected $db;
    //Cac truong du lieu
    var $user_id;
    var $display_name;
    var $user_name='';
    var $user_pass='';
    var $user_email;
    var $user_phone;
    var $user_registered ;
    var $user_salt='123';
    var $user_group_id='1';
    var $user_activation_key = '122';
    var $user_status=0;
    
    //Ham khoi tao
    public function __construct(){
    	$this->db = Zend_Registry::get('db');
    }
    
    //Get all user
    public function getAll(){
    	$query = $this->db->select();
    	$query->from($this->_name);
    	return $this->db->fetchAll($query);
    }
    
    //Them mới user
    public function insertUser(){
    	$data = array(
    			'user_name' => $this->user_name,
    			'user_pass' => $this->user_pass,
    			'display_name' => $this->display_name,
    			'user_pass' => md5($this->user_pass.$this->user_salt),
    			'user_email'=>$this->user_email,
    	        'user_phone'=>$this->user_phone,
    			'user_salt'=>$this->user_salt,
    			'user_activation_key'=>$this->user_activation_key,
    	        'user_registered'=>$this->user_registered,
    	        'user_status'=>$this->user_status,
    	        'user_group_id'=>$this->user_group_id,
    	);
    	//var_dump($data); die;
    	$this->db->insert($this->_name,$data);
    	return $this->db->lastInsertId();
    }
        //Tra ve thong tin user by id
    public  function getUserByIdNoPass(){
    	$query = $this->db->select();
    	$query->from($this->_name,array('userid','username','fullname','displayname','email','birthday','active','level','socialid','avatar'));
    	$query->where("userid =?", $this->userid);
    	$result = $this->db->fetchRow($query);
    	return $result;
    }
    //Tra ve thong tin user by id
    public  function getUserById(){
    	$query = $this->db->select();
    	$query->from($this->_name);
    	$query->where("userid =?", $this->userid);
    	$result = $this->db->fetchRow($query);
    	return $result;
    }
    //Tra ve thong tin user by email
    public  function getUserByEmail(){
    	$query = $this->db->select();
    	$query->from($this->_name);
    	$query->where("user_email =?", $this->user_email);
    	$result = $this->db->fetchRow($query);
    	return $result;
    }
    public  function getUserByEnailNoPass(){
        $query = $this->db->select();
        $query->from($this->_name,array('user_id','user_name','display_name','user_email','user_phone','user_status'));
        $query->where("user_email =?", $this->user_email);
        $result = $this->db->fetchRow($query);
        return $result;
        
    }
    public  function getUserByUsername(){
    	$query = $this->db->select();
    	$query->from($this->_name);
    	$query->where("user_name =?", $this->user_name);
    	$result = $this->db->fetchRow($query);
    	return $result;
    }
    //Kiểm tra tồn tại Username
    public function checkExistUsername($username){
    	$query = $this->db->select();
    	$query->from($this->_name);
    	$query->where("user_name =?", $username);
    	$result = $this->db->fetchRow($query);
    	if($result){
    		return true;
    	}
    	return $result;
    }
    //kiem tra tồn tại Email
    public function checkExistEmail($email){
    	$query = $this->db->select();
    	$query->from($this->_name);
    	$query->where("user_email =?", $email);
    	$result = $this->db->fetchRow($query);
    	if($result){
    		return true;
    	}
    	return $result;
    }
    //kiem tra active mail
    public function checkActive($email,$key){
    	$query = $this->db->select();
    	$query->from($this->_name,array('user_name'));
    	$query->where("user_email =?", $email);
    	$query->where("user_activation_key =?", $key);
    	$query->where("user_status =?", 0);
    	$result = $this->db->fetchRow($query);
    	return $result;
    }
    
    //kiem tra active mail
    public function active($email){
        $data = array(
        	'user_status'=>1
        );
        $where = array('user_email =?' => $email);
        $this->db->update($this->_name,$data,$where);
        
    }
    
    //Kiểm tra đăng nhập với Zend_Auth
    public function login($account,$password){
        //echo  $password.' '.$account;die;
    	$db = Zend_Registry::get('connectDB');
    	$auth = Zend_Auth::getInstance ();
    	$auth->setStorage(new Zend_Auth_Storage_Session('default'));
    	$authAdapter = new Zend_Auth_Adapter_DbTable($db);
    	
    	$authAdapter->setTableName($this->_name);//tên_bảng_chứa_thông_tin_chứng_thực
    	if(filter_var($account, FILTER_VALIDATE_EMAIL))
    	{
    	    $authAdapter->setIdentityColumn('user_email');//tên_cột_nhận_dạng    	    
    	}else {
    	    $authAdapter->setIdentityColumn('user_name');//tên_cột_nhận_dạng
    	    
    	}
    	
    	$authAdapter->setCredentialColumn('user_pass');//tên_cột_chứa_thông_tin_bí_mật
    
    	$authAdapter->setIdentity($account);//dữ_liệu_của_identity_đầu_vào
    	$authAdapter->setCredential(md5($password));//dữ_liệu_credential_đầu_vào
    	//Tao truy van - dieu kien dang nhap
    	$select = $authAdapter->getDbSelect();
    	//$select->where("isactive = '1'");
    	$result = $auth->authenticate($authAdapter);
    	if ($result->isValid()) {
    		$data = $authAdapter->getResultRowObject(null, array('user_pass','user_activation_key','user_salt'));
    		$auth->getStorage()->write($data);
    		//$this->updateLastlogin($data->userid);
    		return true;
    	}
    	return false;
    }
    
    //Kiểm tra đăng nhập với Zend_Auth
    public function loginDev($account,$password){
        //echo  $password.' '.$account;die;
        $db = Zend_Registry::get('connectDB');
        $auth = Zend_Auth::getInstance ();
        $auth->setStorage(new Zend_Auth_Storage_Session('developer'));
        $authAdapter = new Zend_Auth_Adapter_DbTable($db);
         
        $authAdapter->setTableName($this->_name);//tên_bảng_chứa_thông_tin_chứng_thực
        if(filter_var($account, FILTER_VALIDATE_EMAIL))
        {
            $authAdapter->setIdentityColumn('user_email');//tên_cột_nhận_dạng
        }else {
            $authAdapter->setIdentityColumn('user_name');//tên_cột_nhận_dạng
            	
        }
         
        $authAdapter->setCredentialColumn('user_pass');//tên_cột_chứa_thông_tin_bí_mật
    
        $authAdapter->setIdentity($account);//dữ_liệu_của_identity_đầu_vào
        $authAdapter->setCredential(md5($password));//dữ_liệu_credential_đầu_vào
        //Tao truy van - dieu kien dang nhap
        $select = $authAdapter->getDbSelect();
        $select->where("user_group_id = '2'");
        $result = $auth->authenticate($authAdapter);
        $res = array();
        $res['status'] = 0;
        if ($result->isValid()) {
            $data = $authAdapter->getResultRowObject(null, array('user_pass','user_activation_key','user_salt'));
            if($data->user_status==0){
                $res['message']="Tài khoản của bạn chưa được kích hoạt. Vui lòng kiểm tra lại mail hoặc liên hệ <b>suport@kidplay.vn</b> để được hổ trợ.";
            }else if($data->user_status==1){
                $res['message']="Tài khoản của bạn chưa được xác nhận. Nếu cảm thấy chờ đợi quá lâu vui lòng liên hệ <b>suport@kidplay.vn</b> để được hổ trợ.";
            }else{
                $auth->getStorage()->write($data);
                $res['status'] = 1;
            }
            //$this->updateLastlogin($data->userid);
            
        }else {
            $res['message']='Tài khoản đăng nhập không hợp lệ hoặc mật khẩu không đúng';
        }
        return $res;
    }
    //Kiểm tra đăng nhập với Zend_Auth
    public function loginAdmin($account,$password){
        //echo  $password.' '.$account;die;
        $db = Zend_Registry::get('connectDB');
        $auth = Zend_Auth::getInstance ();
        $auth->setStorage(new Zend_Auth_Storage_Session('admin'));
        $authAdapter = new Zend_Auth_Adapter_DbTable($db);
         
        $authAdapter->setTableName($this->_name);//tên_bảng_chứa_thông_tin_chứng_thực
        if(filter_var($account, FILTER_VALIDATE_EMAIL))
        {
            $authAdapter->setIdentityColumn('user_email');//tên_cột_nhận_dạng
        }else {
            $authAdapter->setIdentityColumn('user_name');//tên_cột_nhận_dạng
            	
        }
         
        $authAdapter->setCredentialColumn('user_pass');//tên_cột_chứa_thông_tin_bí_mật
    
        $authAdapter->setIdentity($account);//dữ_liệu_của_identity_đầu_vào
        $authAdapter->setCredential(md5($password));//dữ_liệu_credential_đầu_vào
        //Tao truy van - dieu kien dang nhap
        $select = $authAdapter->getDbSelect();
        $select->where("user_group_id = '3'");
        $result = $auth->authenticate($authAdapter);
        if ($result->isValid()) {
            $data = $authAdapter->getResultRowObject(null, array('user_pass','user_activation_key','user_salt'));
            $auth->getStorage()->write($data);
            //$this->updateLastlogin($data->userid);
            return true;
        }
        return false;
    }
    public function updateInfo(){
        if($this->username){
            $data = array(
            	'username'=>$this->username,
                'displayname'=>$this->displayname
            );
        }else {
            $data = array(
            		'displayname'=>$this->displayname
            );
        }
        $where = array('userid =?'=>$this->userid);
        return $this->db->update($this->_name,$data,$where);
    }
    public function updatePass(){
    	$data = array(
				'password'=>md5($this->password.$this->salt),
				'salt'=>$this->salt
		);
    	$where = array('userid =?'=>$this->userid);
    	return $this->db->update($this->_name,$data,$where);
    }
    public function updateLastlogin($userid){
        $func = new Application_Model_Functions();
    	$data = array(
    			'last_login'=>$func->get_Datetime_Now()
    	);
    	$where = array('userid =?'=>$userid);
    	return $this->db->update($this->_name,$data,$where);
    }
    public function updateActive(){
    	$data = array(
    			'active'=>$this->active
    	);
    	$where = array('userid =?'=>$this->userid);
    	return $this->db->update($this->_name,$data,$where);
    }
    public function updateLevel(){
    	$data = array(
    			'level'=>$this->level
    	);
    	$where = array('userid =?'=>$this->userid);
    	return $this->db->update($this->_name,$data,$where);
    }

}

